import Vue from 'vue'
//创建Vuex全局状态管理
import Vuex from 'vuex'
Vue.use(Vuex)

//每次页面初始化时，从locaStorage中取数据
let car=window.JSON.parse(localStorage.getItem("cart")||"[]")

const store = new Vuex.Store({
  state:{
      //{id,count,selected,price}
      cart:car//购物车数组
  },
  mutations:{
    addToCar(state,goods){
        //找到对应商品记录，更新count
        let flag=false
        // state.cart.push(goods)
        state.cart.some(item=>{
            if(item.id==goods.id){
                item.count+=goods.count
                flag=true
                return true
            }
        })
        //没找到就push一条新记录
        if(!flag){
            state.cart.push(goods)
        }
        //为了持久储存购物车数据，把数据序列化出来，存储到localStorage中
        localStorage.setItem('cart',window.JSON.stringify(state.cart))
    },
    updateGoodsCount(state,goods){
      //根据传递商品的信息，更新购物车中商品的数量
      state.cart.some(item=>{
        if(item.id==goods.id){
          item.count=goods.count
          return true
        }
      })
      localStorage.setItem('cart',window.JSON.stringify(state.cart))
    },
    delFromCart(state,id){
      //根据传入id删除缓存中数据
      state.cart.some((item,i)=>{
        if(item.id==id){
          state.cart.splice(i,1)
          return true
        }
      })
      localStorage.setItem('cart',window.JSON.stringify(state.cart))
    },
    changSelectState(state,obj){
      //更改缓存中的商品选中状态
      state.cart.some(item=>{
        if(item.id==obj.id){
          item.selected=obj.selected
          return true
        }
      })
      localStorage.setItem('cart',window.JSON.stringify(state.cart))
    }
  },
  getters:{
      //返回总数
      totalcount(state){
        let sum=0
        state.cart.forEach(item=>sum+=item.count)
        return sum
      },
      idstr(state){
        //获取所有商品id
        let arr=[]
        state.cart.forEach(item=> arr.push(item.id))
        return arr.join(',')
      },
      countObj(state){
        //获取id：count 键值对
        let o={}
        state.cart.forEach(item=>o[item.id]=item.count)
        return o
        // {
        //   88:3
        //   89:5
        // }
      },
      selectedObj(state){
        //id对应的商品选中状态
        let o={}
        state.cart.forEach(item=>o[item.id]=item.selected)
        return o
      },
      selectedcount(state){
        //勾选商品总数
        let count=0
        state.cart.forEach(item=>{
          if(item.selected){
            count+=item.count
          }
        })
        return count
      },
      amount(state){
        //总价
        let count=0
        state.cart.forEach(item=>{
          if(item.selected){
            count+=item.count * item.price
          }
        })
        return count
      }
  }
})

export default store